package com.answeringplayer.service.Impl;

import cn.hutool.cache.Cache;
import cn.hutool.cache.CacheUtil;
import cn.hutool.captcha.CaptchaUtil;
import cn.hutool.captcha.LineCaptcha;
import com.answeringplayer.dto.CaptchaDTO;
import com.answeringplayer.service.CaptchaService;
import org.springframework.stereotype.Service;

import java.util.concurrent.TimeUnit;


@Service
public class CaptchaServiceImpl implements CaptchaService {

    // 使用 Hutool 的内存缓存，验证码5分钟过期
    private static final Cache<String, String> CAPTCHA_CACHE = CacheUtil.newFIFOCache(100, TimeUnit.MINUTES.toMillis(5));

    @Override
    public CaptchaDTO generateCaptcha() {
        // 生成验证码（4位，带干扰线）
        LineCaptcha lineCaptcha = CaptchaUtil.createLineCaptcha(120, 40, 4, 20);

        String code = lineCaptcha.getCode(); // 验证码文本
        String base64Image = lineCaptcha.getImageBase64(); // Base64 图片

        // 生成唯一 ID
        String captchaId = cn.hutool.core.util.IdUtil.fastSimpleUUID();

        // 存入缓存（key: captchaId, value: code）
        CAPTCHA_CACHE.put(captchaId, code);

        return new CaptchaDTO(captchaId, "data:image/png;base64," + base64Image);
    }

    @Override
    public boolean validateCaptcha(String captchaId, String userInput) {
        if (captchaId == null || userInput == null) {
            return false;
        }

        String correctCode = CAPTCHA_CACHE.get(captchaId);
        if (correctCode == null) {
            return false; // 已过期或不存在
        }

        // 忽略大小写比较，并移除空格
        boolean isValid = correctCode.equalsIgnoreCase(userInput.trim());

        // 可选：验证后立即失效（防止重复使用）
        if (isValid) {
            CAPTCHA_CACHE.remove(captchaId);
        }

        return isValid;
    }

}
